package org.farec.tcc.spring.controller;

import java.text.ParseException;

import javax.servlet.http.HttpServletRequest;

import org.farec.tcc.dao.CilindradaDao;
import org.farec.tcc.dao.FabricanteDao;
import org.farec.tcc.dao.ModeloVeiculoDao;
import org.farec.tcc.modelo.Fabricante;
import org.farec.tcc.modelo.ModeloVeiculo;
import org.hibernate.Session;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
public class ModeloVeiculoController {
	
	@RequestMapping("/formModelo")
	public String formModeloVeiculo(Model model, HttpServletRequest request)
	{
		Session session = (Session) request.getAttribute("session");
		FabricanteDao daoFabricante = new FabricanteDao(session);
		CilindradaDao daoCilindrada = new CilindradaDao(session);
		
		model.addAttribute("fabricantes", daoFabricante.lista());
		model.addAttribute("cilindradas", daoCilindrada.lista());
		return "cadmodeloveiculo";
	}
	
	@RequestMapping("/adicionarModelo")
	public String adiciona(ModeloVeiculo modeloVeiculo, String cilindrada, String fabricante, HttpServletRequest request) throws ParseException
	{
		Session session = (Session) request.getAttribute("session");
		FabricanteDao daoFabricante = new FabricanteDao(session);
		CilindradaDao daoCilindrada  = new CilindradaDao(session);
		
		//Busca o codigo do fabricante de acordo com o nome do fabricante
		modeloVeiculo.setIdFabricante(daoFabricante.buscaCodigo(fabricante).getId());
		
		//Busca o codigo da cilindrada de acordo com o nome da cilindrada
		modeloVeiculo.setIdCilindrada(daoCilindrada.buscaCodigo(cilindrada).getId());

		ModeloVeiculoDao daoModeloVeiculoDao = new ModeloVeiculoDao(session);
		daoModeloVeiculoDao.adiciona(modeloVeiculo);
		
		return "redirect:listaModelo";
	}
	
	@RequestMapping("/listaModelo")
	public String lista(Model model, HttpServletRequest request)
	{
		Session session = (Session) request.getAttribute("session");
		ModeloVeiculoDao daoModeloVeiculo = new ModeloVeiculoDao(session);
		FabricanteDao daoFabricante = new FabricanteDao(session);
		CilindradaDao daoCilindrada = new CilindradaDao(session);
	
		model.addAttribute("modelos", daoModeloVeiculo.lista());
		model.addAttribute("fabricantes", daoFabricante.lista());
		model.addAttribute("cilindradas", daoCilindrada.lista());
		return "modeloveiculo";
	}
	
	@RequestMapping("/exibeModelo")
	public String exibe(ModeloVeiculo modeloVeiculo, Model model, HttpServletRequest request)
	{
		Session session = (Session) request.getAttribute("session");
		ModeloVeiculoDao daoModeloVeiculo = new ModeloVeiculoDao(session);
		FabricanteDao daoFabricante = new FabricanteDao(session);
		CilindradaDao daoCilindrada = new CilindradaDao(session);
		
		model.addAttribute("modelo", daoModeloVeiculo.exibe(modeloVeiculo));
		model.addAttribute("fabricantes", daoFabricante.lista());
		model.addAttribute("cilindradas", daoCilindrada.lista());
		return "editmodeloveiculo";
	}
	
	@RequestMapping("/alterarModelo")
	public String altera(ModeloVeiculo modeloVeiculo, String cilindrada, String fabricante, HttpServletRequest request) throws ParseException
	{
		Session session = (Session) request.getAttribute("session");
		FabricanteDao daoFabricante = new FabricanteDao(session);
		CilindradaDao daoCilindrada  = new CilindradaDao(session);
		
		//Busca o codigo do fabricante de acordo com o nome do fabricante
		modeloVeiculo.setIdFabricante(daoFabricante.buscaCodigo(fabricante).getId());
		
		//Busca o codigo da cilindrada de acordo com o nome da cilindrada
		modeloVeiculo.setIdCilindrada(daoCilindrada.buscaCodigo(cilindrada).getId());

		ModeloVeiculoDao daoModeloVeiculoDao = new ModeloVeiculoDao(session);
		daoModeloVeiculoDao.altera(modeloVeiculo);
		
		return "redirect:listaModelo";
	}
	
	@RequestMapping("/removeModelo")
	public String remover(ModeloVeiculo modeloVeiculo, HttpServletRequest request)
	{
		Session session = (Session) request.getAttribute("session");
		ModeloVeiculoDao daoModeloVeiculo = new ModeloVeiculoDao(session);	
		daoModeloVeiculo.remover(modeloVeiculo);
		return "redirect:listaModelo";
	}

}
